package battleco

import (
	"wails/schema/config/commonco"
	"wails/schema/enums/battleenum"
)

// C效果
// @schema_export --ident=schema --json --config=效果
// @schema_go
// @cache_ts
// @alias 效果
type C效果 struct {

	// @alias 警示信息
	// 指定当效果被执行时产生的警示信息。警示信息在世界内界面的左侧显示。
	J警示信息 string

	// 指定该效果将被执行的几率 (0和1之间)。0表示永远不会被执行；1 (默认)即表示始终会执行。
	// @alias 几率
	J几率 float64 `value:"1"`

	// @alias 延迟时间
	Y延迟时间 float64

	//
	//// @alias 修正施法单位
	//X修正施法单位 *SEffectWhichUnit
	//
	//// @alias 修正施法玩家
	//X修正施法玩家 *SEffectWhichPlayer

	// @alias 用户数据
	// 浮点数: 键->浮点数
	Y用户数据 map[string]float64

	// @alias 验证器
	// 执行验证器
	Y验证器 map[string]string `link:"验证器"`

	// @alias 别名
	// 允许所有拥有相同别名的效果在所需条件检查中被视为同等物。
	B别名 map[string]string

	// @alias 标记
	// 指定该效果的验证器使用的标记。标记通常用于分散一个玩家的多个单位对区域中所有敌人单位使
	B标记 *S标记

	// @alias 完成效果
	// 效果完成后执行的效果
	// 相当于一条效果链，用于避免需要多个效果时，增加效果集。
	W完成效果 string `link:"效果"`
}

// C效果_应用行为
// 执行后让目标获得行为
// 演算体事件 [[battleenum.ActorSubEffect]]
// ```
// CreateLater -> Start -> Stop -> Dispose
// ```
// @schema_export --ident=schema --json --config=效果
// @schema_go
// @cache_ts
// @alias 效果_应用行为
type C效果_应用行为 struct {
	C效果

	// @alias 标旗
	B标旗 map[battleenum.X效果_应用行为_标旗]bool

	// @alias 目标单位
	// 该效果将该行为应用至的目标
	M目标单位 *SEffectWhichUnit

	// @alias 行为
	// 由该效果带来的行为
	X行为 string `link:"行为"`

	// 该行为被该效果所应用的数量
	// @alias 数量
	S数量 int

	// 某些类型的行为所支持的持续时间通常在行为数据中被指定了。如果在该效果中设置“使用持续时间”标旗，则该值将会覆盖行为数据所指定的持续时间。
	// @alias 持续时间
	X持续时间 float64
}

// C效果_应用力
// 执行后让目标获得力, 产生位移
// 为了避免与移动冲突, 目前会强制打断单位动作
// @schema_export --ident=schema --json --config=效果
// @schema_go
// @cache_ts
// @alias 效果_应用力
type C效果_应用力 struct {
	C效果

	// 量
	// 被该效果应用的力值。负值会将单位拖入效果中心点。
	Amount float64

	// 应用力-标旗
	ApplyForceFlags map[battleenum.EffectApplyForceFlag]bool

	// 质量系数
	// 定义修改被请求的力值时，被影响的单位有多少质量应该纳入考虑。1表示单位的质量会产生正常惯性。0表示在计算应用的力时，质量被忽略。
	MassFraction string

	// 时间刻度源
	// 定义乘以力的时间基准。
	TimeScaleSource *SEffectWhichTimeScale

	// 位置
	// 效果发生的位置
	WhichLocation *SEffectWhichLocation

	// 单位
	// 指定效果树中的哪个单位来对其应用力。
	WhichUnit *SEffectWhichUnit
}

// C效果_取消指令
// 执行后让目标取消指令
// @schema_export --ident=schema --json --config=效果
// @schema_go
// @cache_ts
// @alias 效果_取消指令
type C效果_取消指令 struct {
	C效果
	// 技能命令
	// 如果设置，该效果将只会取消有匹配技能命令的指令。
	AbilCmd string

	// 计数
	// 负责定义要取消多少个指令。
	Count int

	// 标旗
	Flags map[battleenum.EffectCancelOrderFlag]bool

	// 哪一个单位
	// 指定效果树中的哪个单位来对其取消指令。
	WhichUnit *SEffectWhichUnit
}

// @schema_export --ident=schema --json --config=效果
// @schema_go
// @cache_ts
// @alias 效果_复活
type C效果_复活 struct {
	C效果
}

// C效果_创建治疗者
// 执行后产生治疗者, 消耗自身能量, 治愈目标单位
// 演算体事件 [[battleenum.ActorSubEffect]]
// ```
// CreateLater -> Start -> Initial(延时可中止) -> Period(可中止) -> Expire(延时可中止) -> Stop -> Dispose
// 效果中止后: Abort -> Stop -> Dispose
// ```
// @schema_export --ident=schema --json --config=效果
// @schema_go
// @cache_ts
// @alias 效果_创建治疗者
type C效果_创建治疗者 struct {
	C效果
	// 抽取活力
	// 施法者消耗自身活力值治疗目标活力值的消耗率
	Cost *S消耗

	// 结束延迟
	// 周期性持续时间结束后所发生的延迟
	ExpireDelay float64

	// 终止效果
	ExpireEffect string

	// 最终效果
	FinalEffect string

	// 标旗
	// 该效果的标旗
	Flags map[battleenum.EffectHealerFlag]bool

	// 轰击单位
	// 是该效果的目标的单位
	ImpactUnit *SEffectWhichUnit

	// 初始延迟
	// 该效果被创建时所发生的延迟。
	InitialDelay float64

	// 初始效果
	InitialEffect string

	// 初始活力回复
	InitialVital map[battleenum.H活力类型]*SEffectCreateHealerVital

	// 发射单位
	// 指定哪个单位花费活力值（如果适用）来治疗轰击单位（即目标）。
	LaunchUnit *SEffectWhichUnit

	// 周期计数
	PeriodCount int

	// 周期性效果
	// 每一跳执行的效果
	PeriodicEffect string

	// 周期性周期
	PeriodicPeriod float64

	// 周期性验证器
	// 每一跳运行的验证器
	PeriodicValidator map[string]string

	// 周期性活力回复
	PeriodicVital map[battleenum.H活力类型]*SEffectCreateHealerVital

	// 时间系数
	// 该值为目标单位“修理时间”的倍数。 如果该结果值非零，则该值将是完全治愈一个单位所需要的时间；如果该结果值为零，则将被治疗的目标会按“每秒回复活力率”进行恢复。
	TimeFactor float64
}

// C效果_创建持续效果
// 执行后产生一个持续性的效果, 周期性触发指定的效果
// 演算体事件 [[battleenum.ActorSubEffect]]
// ```
// CreateLater -> Start -> Initial(延时可中止) -> Period(可中止) -> Expire(延时可中止) -> Stop -> Dispose
// 效果中止后: Abort -> Stop -> Dispose
// ```
// @schema_export --ident=schema --json --config=效果
// @schema_go
// @cache_ts
// @alias 效果_创建持续效果
type C效果_创建持续效果 struct {
	C效果

	// AI 通知效果
	// 这可以用来警示AI当心一个区域效果，可帮助AI避开敌对区域并且优先选择友方区域。
	AINotifyEffect string `tag:"todo"`

	// 侦测过滤器
	// 如果该效果的“暴露范围”是非零的，那么该字段负责配置哪些单位会被探测到。
	DetectFilters string `tag:"todo"`

	// 效果随机模式
	EffectRandMode battleenum.RandMode

	// 结束延迟
	// 周期性持续时间结束后所发生的延迟
	ExpireDelay float64

	// 效果 - 结束
	// 持续性效果结束后所运行的效果
	ExpireEffect string

	// 偏移 - 结束
	// “结束效果”的偏移坐标
	ExpireOffset *commonco.S点 `tag:"todo"`

	// 效果 - 最终
	// 持续性效果被摧毁时所运行的效果，不管其结束与否
	FinalEffect string

	// 偏移 - 最终
	// “最终效果”的偏移坐标
	FinalOffset *commonco.S点 `tag:"todo"`

	// 标旗
	// 该效果的标旗
	Flags map[battleenum.CreatePersistentFlag]bool

	// 高度图
	// 如果该效果的“暴露范围”是非零的，那么该字段则负责配置暴露发生的高度图。如果暴露发生在空中高度图，则视线被忽略。
	HeightMap float64 `tag:"todo"`

	// 初始延迟
	// 该效果被创建时所发生的延迟。
	InitialDelay float64

	// 效果 - 初始
	// 起始延迟之后所运行的效果
	InitialEffect string

	// 偏移 - 最初
	// “起始效果”的偏移坐标
	InitialOffset *commonco.S点

	// 偏移朝向备用
	// 如果开始和结束其中一个或两者都无效时，在计算关联开始和结束偏移矢量的生成效果时，指定要使用的备用单位。
	OffsetFacingFallback *SEffectWhichUnit

	// 偏移随机模式
	OffsetRandMode battleenum.RandMode

	// 位置偏移 - 结束
	// 与“偏移矢量开始位置”结合使用，来对子类效果在被执行时将会“运行”的方向。“结束位置”是效果将从“开始位置”前往的最远处的位置。
	OffsetVectorEndLocation *SEffectWhichLocation

	// 位置偏移 - 开始
	// 与“偏移矢量结束位置”结合使用，来对子类效果在被执行时将会“运行”的方向进行设置。“开始位置”通常不是施法者就是目标位置，主要视使用该效果的技能是否合理为准。
	OffsetVectorStartLocation *SEffectWhichLocation

	// 时段计数
	// 时段数
	PeriodCount int

	// 时段效果
	// 当一个时段结束时所运行的效果
	PeriodicEffectArray map[string]string

	// 周期性偏移
	// 周期性效果的偏移坐标
	PeriodicOffsetArray []*commonco.S点

	// 时段时长
	// 指定执行每个周期性效果之间的时间长度。若效果的周期计数超过该数组中条目的数量，则效果将会重新循环并按序重复条目，直到达到周期计数。
	PeriodicPeriodArray map[string]string

	// 周期随机模式
	PeriodicRandMode battleenum.RandMode

	//  周期性验证器
	// 会进行周期性检查的验证器。如果该验证器未通过检查，则持续性效果将被取消
	PeriodicValidator map[string]string

	//  雷达过滤
	// 如果该效果的“暴露范围”是非零的，那么该字段负责配置哪些单位在战场迷雾下会显示为雷达光斑。
	RadarFilters string

	//  暴露标旗
	// 定义该效果范围如何为施法玩家显示的标旗
	RevealFlags []bool

	//  暴露范围
	// 被显示的效果区域的范围
	RevealRadius float64

	//  时间刻度源
	// 指定在效果更新时，用于跟踪时间进程的单位。
	TimeScaleSource *SEffectWhichTimeScale

	// 位置
	// 效果发生的位置
	WhichLocation *SEffectWhichLocation
}

// C效果_创建单位
// 执行后在目标位置创建单位
// @schema_export --ident=schema --json --config=效果
// @schema_go
// @cache_ts
// @alias 效果_创建单位
type C效果_创建单位 struct {
	C效果

	// @alias 创建标旗
	C创建标旗 map[battleenum.C创建单位标旗]bool

	// @alias 生成计数
	// 生成的单位数量
	S生成计数 float64

	// @alias 生成效果
	// 在每个被生成的单位上所运行的效果
	S生成效果 string

	// @alias 生成偏移
	// 指定一组与效果位置（由“哪一个位置”字段指定） 相关联的X、Y偏移。效果将使用单位可距离其生成的最近偏移，来对新单位被创建时对其进行定位。
	S生成位置偏移 *commonco.S点

	// @alias 生成所有者
	// 被生成单位的所有者
	S生成所有者 *SEffectWhichPlayer

	// @alias 生成范围
	// 单位可被创建的距离该效果的最远距离。
	S生成范围 float64

	// @alias 生成单位
	// 进行生成的单位
	S生成单位 map[string]string `link:"单位"`

	// @alias 起源单位
	// 创建单位所在的起源单位
	Q起源单位 *SEffectWhichUnit

	// @alias 位置
	// 效果发生的位置
	W位置 *SEffectWhichLocation
}

// 效果-伤害，世界的活力损耗入口
// 执行后让目标受到伤害
// 演算体事件 [[battleenum.ActorSubEffect]]
// ```
// CreateLater -> Start -> Dodge(true) -> Stop -> Dispose
//
//	Dodge(false)-> Damage -> Stop -> Dispose
//
// ```
// @schema_export --ident=schema --json --config=效果
// @schema_go
// @cache_ts
// @alias 效果_伤害
type C效果_伤害 struct {
	C效果

	// @alias 伤害量
	// 由该效果造成的伤害值
	S伤害量 float64

	// @alias 伤害量限制
	S伤害量限制 *commonco.ValueLimit

	// @alias 暴击率
	B暴击率 float64

	// @alias 暴击伤害系数
	B暴击伤害系数 float64 `value:"1.0"`

	// @alias 破甲率
	P破甲率 float64

	// @alias 破甲伤害系数
	P破甲伤害系数 float64

	// @alias 命中率
	M命中率 float64

	// @alias 格挡率
	G格挡率 float64

	// @alias 格挡免伤系数
	B格挡免伤系数 float64 `value:"1.0"`

	// @alias 反击率
	F反击率 float64

	// 触发反击后，执行的效果
	// @alias 反击效果
	F反击效果 string `link:"效果"`
	// @alias 死亡类型
	// 单位被该效果杀死时所播放的死亡动画类型
	S死亡类型 battleenum.DeathType

	// @alias 死亡效果
	// 如果目标死亡触发的效果
	S死亡效果 string `link:"效果"`

	// @alias 伤害效果
	// 如果目标受到伤害触发的效果
	S伤害效果 string `link:"效果"`

	// @alias 伤害标旗
	// 该效果的标旗
	S伤害标旗 map[battleenum.S伤害标旗]bool

	// @alias 伤害来源单位
	H伤害来源单位 *SEffectWhichUnit

	// @alias 轰击单位
	H轰击单位 *SEffectWhichUnit

	// @alias 轰击单位验证器
	// 轰击单位只会在这些验证器通过时被伤害，否则轰击单位只会作为攻击的位置点。轰击单位仍然可能会求救 (如果被请求)，即便这些验证器未通过。
	H轰击单位验证器 map[string]string

	// @alias 杀死幻像
	// 当开启时, 该效果将击杀幻像。
	S杀死幻像 bool

	// @alias 伤害类型
	// 伤害种类由Kind定义，普通类型如近战，魔法，远程。属性类型例如金木水火土的属性伤害等在此定义。
	S伤害类型 battleenum.S伤害类型

	// @alias 发射位置
	// 发射位置可被用来指定一个轰击角度，从而当进行弧形区比较时效果使用的方位。
	F发射位置 *SEffectWhichLocation

	// @alias 吸取系数
	// 对目标产生的伤害乘以吸收系数[LeechFraction]后的数值会被吸收。
	X吸取系数 map[battleenum.H活力类型]float64

	// @alias 禁止造成伤害吸取活力
	J禁止造成伤害吸取活力 map[battleenum.H活力类型]bool

	// @alias 禁止承受伤害获取活力
	// 目标受到伤害后，禁止目标获得活力
	J禁止承受伤害获取活力 map[battleenum.H活力类型]bool

	// @alias 活力伤害
	H活力伤害 *S效果伤害活力伤害

	// @alias 创建表现
	C创建表现 map[string]*S效果伤害表现 `link:"表现"`
}

type S效果伤害表现 struct {
	// @alias 创建时机
	C创建时机 battleenum.E效果伤害创建时机

	// @alias 位置
	W位置 *SEffectWhichScope

	// @alias 表现
	B表现 string `link:"表现"`
}

type S效果伤害活力伤害 struct {

	// 对目标造成活力值[VitalBonus]伤害，独立于伤害量
	// @alias 固定值
	G固定值 map[battleenum.H活力类型]*commonco.ValueRandom

	// 活力的来源单位
	// @alias 来源单位
	L来源单位 *SEffectWhichUnit

	// 对目标造成当前活力乘以系数[VitalFractionCurrent]的伤害
	// @alias 当前值系数
	X当前值系数 map[battleenum.H活力类型]*commonco.ValueRandom

	// 对目标造成最大活力乘以系数[VitalFractionMax]的伤害
	// @alias 最大值系数
	Z最大值系数 map[battleenum.H活力类型]*commonco.ValueRandom
}

// C效果_销毁治疗者
// 执行后销毁目标治疗者
// @schema_export --ident=schema --json --config=效果
// @schema_go
// @cache_ts
// @alias 效果_销毁治疗者
type C效果_销毁治疗者 struct {
	C效果
	// @alias 计数
	// 有多少匹配所请求参数的治疗者对象被摧毁。
	Count string

	// @alias 效果
	// 如果指定，该效果将只会摧毁由被请求效果所创建的治疗者对象。
	Effect string

	// @alias 范围
	// 治疗效果的搜索区域半径。治疗效果半径在执行范围检查时同样会被纳入考量。
	Radius string

	// @alias 位置
	// 指定寻找治疗者效果进行摧毁的地点。
	WhichLocation string
}

// C效果_销毁持续效果
// 执行后销毁持续效果
// @schema_export --ident=schema --json --config=效果
// @schema_go
// @cache_ts
// @alias 效果_销毁持续效果
type C效果_销毁持续效果 struct {
	C效果
	// @alias 计数
	// 有多少匹配所请求参数的持续性对象被摧毁。
	Count string

	// @alias 效果
	// 如果指定，该效果将只会摧毁由被请求效果所创建的持续性对象。
	Effect string

	// @alias 范围
	// 持续性效果的搜索区域半径。
	Radius string

	// @alias 位置
	// 指定寻找可持续性对象进行摧毁的地点。
	WhichLocation string
}

// C效果_搜索区域
// 执行后搜索目标区域中的单位并释放效果
// 演算体事件 [[battleenum.ActorSubEffect]]
// ```
// CreateLater -> Start -> Impact -> Stop -> Dispose
// ```
// @schema_export --ident=schema --json --config=效果
// @schema_go
// @cache_ts
// @alias 效果_搜索区域
type C效果_搜索区域 struct {
	C效果

	// @alias 搜索标旗
	// 搜索区域的标旗
	S搜索标旗 map[battleenum.S效果搜索标旗]bool

	// @alias 搜索范围
	S搜索范围 battleenum.C查找单位集位置

	// 不包括搜索区域内的单位
	// @alias 排除单位集
	P排除单位集 map[string]*SEffectWhichUnit

	// @alias 包含单位集
	// 包括搜索区域内的单位
	B包含单位集 map[string]*SEffectWhichUnit

	// @alias 原点位置
	// 配置该效果的中心点的位置
	Y原点位置 *SEffectWhichLocation

	// @alias 指向位置
	// 当区域为矩形/扇形时有效, 发射位置[F发射位置]指向轰击位置[ImpactLocation]形成一个方向
	Z指向位置 *SEffectWhichLocation

	// 效果的区域参数
	// 轰击位置[ImpactLocation]决定了区域的中心点
	// @alias 区域集
	Q区域集 map[string]interface{} `_type:"区域"`

	// @alias 最大计数
	// 该效果可选其作为目标的最大单位数
	Z最大计数 float64

	// @alias 最小计数
	// 该效果必须选其作为目标的最小单位数
	Z最小计数 float64

	// @alias 最小数量出错
	// 如果该效果无法获得所需目标数的最小数则会出现的错误。
	Z最小数量出错 string

	// @alias 周期范围加成
	// 每一周期都会自动按照该值扩展搜索范围
	Z周期范围加成 float64

	// @alias 范围模式
	F范围模式 battleenum.F范围模式

	// @alias 循环计数
	// 如果被请求的单位数量未被找到，则多数单位将会被“循环利用”并且不断地枚举产生直到所需条件被满足。
	// 例如：发射3颗导弹，攻击目标范围内的目标，知道导弹消耗完毕。如果只有一个目标，会受到3次伤害
	X循环计数 float64

	// 定义何种目标可以被搜索
	// @alias 目标过滤器
	M目标过滤器 *S目标过滤器

	// @alias 目标验证器
	M目标验证器 map[string]string `link:"验证器"`

	// @alias 目标排序
	// 定义该效果如何优选选择潜在的目标。
	M目标排序 map[string]string `link:"目标排序"`
}

// C效果_发射导弹
// 执行后向目标发射导弹
// 可以通过[AmmoUnit]创建导弹, 也能通过[AmmoWhichUnit]把[目标信息]中的单位作为导弹发射出去
// todo: 增加忽略过程的标旗, 增强性能: 很多时候(例如被击毁的需求比较少), 不需要考虑导弹移动过程中, 会被搜索并应用效果.
// todo: 这种情况下, 可以只计算最终的时间, 忽略过程
// 演算体事件 [[battleenum.ActorSubEffect]]
// ```
// CreateLater -> Start -> Launch -> Impact -> Stop -> Dispose
// ```
// @schema_export --ident=schema --json --config=效果
// @schema_go
// @cache_ts
// @alias 效果_发射单位
type C效果_发射单位 struct {
	C效果

	// @alias 发射标旗
	S发射标旗 map[battleenum.E发射弹药标旗]bool

	// @alias 发射新单位
	// 将被发射的投射物单位链接
	F发射新单位 string `link:"单位"`

	// 将被发射的投射物单位链接
	// @alias 发射单位
	F发射单位 *SEffectWhichUnit

	// @alias 单位速度
	D单位速度 float64

	// 到达射程后，效果结束
	// @alias 射程
	S射程 float64

	// @alias 碰撞过滤器
	S碰撞过滤器 *S目标过滤器

	// 传送过程中，对被碰撞单位产生的效果
	// @alias 碰撞效果
	M碰撞效果 string `link:"效果"`

	// @alias 结束效果
	// 指定一个效果，该效果无论发射物是否轰击到被请求的目标都将执行。这对于清理当发射的发射物无论是否命中目标都已不存在时所创建的任何效果非常有用。
	J结束效果 string `link:"效果"`

	// 结束时清理的行为
	// @alias 结束清理行为
	J结束清理行为 map[string]string `link:"行为"`

	// @alias 轰击效果
	// 当发射物击中其目标时所产生的效果
	H轰击效果 string `link:"效果"`

	// 轰击时获得的行为
	// @alias 轰击行为
	H轰击行为 map[string]string `link:"行为"`

	// @alias 轰击位置
	// 发射物的目标
	H轰击位置 *SEffectWhichLocation

	// @alias 轰击偏移
	// 发射物轰击位置的偏移坐标
	H轰击偏移 *commonco.S点

	// @alias 轰击距离
	// 发射物要靠近目标多近时才会触发轰击效果
	H轰击距离 float64

	// 发射时获得的行为
	// @alias 发射行为
	F发射行为 map[string]string `link:"行为"`

	// @alias 发射效果
	// 当发射物被发射时所产生的效果
	F发射效果 string `link:"效果"`

	// @alias 发射位置
	// 发射物源
	F发射位置 *SEffectWhichLocation

	// @alias 发射偏移
	// 发射物发射位置的偏移坐标
	F发射偏移 *commonco.S点

	// @alias 移动器
	Y移动器 string `link:"移动器"`

	// @alias 占位单位
	// 指定将在发射物的目标位置创建的占位符图片的类型。当发射物结束飞行时（无论其轰击命中目标与否），它都将被摧毁。
	Z占位单位 string

	// @alias 放置区范围
	// 仅在如果该效果设置了“替换”标旗时使用。指定一个半径，在将被放置的“弹药单位”的着弹点的轰击位置周围进行搜索。通常情况下你也会将“死亡”类型设置为“无”从而禁用“弹药单位”在发射物飞行结束时死亡。
	PlacementRange float64

	// @alias 重选目标筛选器
	// 仅在如果该效果设置了“重选目标”标旗时使用。当发射物目标成为无效时，对邻近单位指定一套所需条件和排除条件以找到一个新的目标。“重选目标范围”字段负责指定距离发射物的当前位置多远的距离进行搜索。
	RetargetFilters string

	// @alias 重选目标范围
	// 仅在如果该效果设置了“重选目标”标旗时使用。在发射物的当前位置周围指定一个半径进行搜索。仅有通过“重选目标筛选器”的单位会被考虑重新选择目标。
	RetargetRange float64

	// @alias 返回延迟
	// 触须类发射物的返回延迟。
	ReturnDelay string

	// @alias 返回移动器
	// 用于指定每一射程的自定义发射物移动器。用于触须类发射物。
	ReturnMovers string

	// @alias 已转换的行为
	// 指定将被转移到发射物并在轰击时对单位应用的行为类型。该行为会在发射物被发射时从“发射单位”里移除。
	TransferBehavior string

	// @alias 转换计数
	// 指定被“转移行为”请求的可被该发射物转移的叠加计数。
	TransferCount float64

	// @alias 可见性
	// 如果“可见性”被设为“快照”并且“轰击单位”对效果源是敌对的，那么“单位攻击者”演算体消息将被发送给“轰击单位”，该消息被用来使攻击者暴露一小段时间，在这段时间内攻击者可以被技能选中进行攻击，但是玩家必须要有还击的视野。如果“可见性”被设为“可见”，那么显示器将被附着给攻击者，从而在一小段时间内给“轰击单位”及其盟友赋予其完整的视野。
	Visibility float64

	// @alias 创建表现
	C创建表现 map[string]*S效果发射单位表现
}
type S效果发射单位表现 struct {
	// @alias 创建时机
	C创建时机 battleenum.E效果发射单位创建时机

	// @alias 销毁时机
	X销毁时机 battleenum.E效果发射单位销毁时机

	// @alias 位置
	W位置 *SEffectWhichScope

	// @alias 表现
	B表现 string `link:"表现"`
}

// C效果_发送指令
// 执行后向目标发送指令
// @schema_export --ident=schema --json --config=效果
// @schema_go
// @cache_ts
// @alias 效果_发送指令
type C效果_发送指令 struct {
	C效果
	// @alias 技能命令
	// 命令该目标单位使用的技能命令
	AbilCmd string

	// @alias 命令标旗
	// 该效果的标旗
	CmdFlags map[battleenum.EffectCmdFlags]bool

	// @alias 玩家
	// 指定应发出被请求指令的玩家，即用于检查玩家是否被允许发出所谓指令（由于共享控制、资源等等） 的指令。如果未指定玩家，则忽略结盟状态。
	Player *SEffectWhichPlayer

	// @alias 目标
	// 用于配置该技能将以什么为目标
	Target *SEffectWhichUnit

	// @alias 单位
	// 用于配置接受该指令的单位
	WhichUnit *SEffectWhichUnit
}

// @schema_export --ident=schema --json --config=效果
// @schema_go
// @cache_ts
// @alias 效果_执行
type C效果_执行 struct {
	C效果

	// @alias 执行单位
	// 用于配置执行的单位
	Z执行单位 *SEffectWhichUnit

	// @alias 执行
	Z执行 string `link:"执行"`
}

// C效果_修改玩家
// 执行后修改玩家属性
// @schema_export --ident=schema --json --config=效果
// @schema_go
// @cache_ts
// @alias 效果_修改玩家
type C效果_修改玩家 struct {
	C效果

	// @alias 费用
	// 指定资源、冷却以及或者充能对被请求的玩家应用。这个可以在你没有技能可以指定并且无法花费这些值的情况下使用。
	Cost *SEffectModifyPlayerCost

	// @alias 资源
	// 指定一定量的资源，赋予被请求的玩家。
	Resources map[battleenum.Z游戏资源类型]float64

	// @alias 已采集资源
	// 指定一定量的资源，视为已由被请求的玩家所收集。
	ResourcesCollected map[battleenum.Z游戏资源类型]float64

	// @alias 玩家
	// 指定哪个玩家将会被效果修改。
	WhichPlayer *SEffectWhichPlayer
}

type SEffectModifyPlayerCost struct {
	// @alias 技能
	Abil string

	// @alias 单位
	Unit *SEffectWhichUnit
}

// C效果_修改场景
// 执行后修改场景属性
// @schema_export --ident=schema --json --config=效果
// @schema_go
// @cache_ts
// @alias 效果_修改场景
type C效果_修改场景 struct {
	C效果

	// 暂停所有单位计时器的目标过滤器
	// 符合目标过滤器的单位的计时器将被暂停
	// 可实现使用技能时, 除了施法者, 其他所有单位静滞的效果
	// todo: 效果的计时由源单位管理
	TimerTargetFilter string `link:"目标查找"`

	// 暂停所有单位活力恢复的目标过滤器
	// 符合目标过滤器的单位的活力恢复将被暂停
	RegenTargetFilter map[battleenum.H活力类型]string `link:"目标查找"`
}

// C效果_修改单位
// 执行后修改单位属性
// @schema_export --ident=schema --json --config=效果
// @schema_go
// @cache_ts
// @alias 效果_修改单位
type C效果_修改单位 struct {
	C效果

	// @alias 复制指令计数
	// 指定“发射单位”的多少个指令被复制给“轰击单位”。“轰击单位”的指令被清除（不过在完成之前，类似“变形”等不可能打断的指令可能会保留）。
	CopyOrderCount string

	// @alias 复制集结计数
	// 指定有多少个集结点位置从“发射单位”复制到“轰击单位”。
	CopyRallyCount string

	// @alias 消耗
	// 指定一定量的资源、冷却、充能以及或者活力值应用于被请求的“轰击单位”。这个可以在你没有技能可以指定并且无法花费这些值的情况下使用。
	X消耗 *S消耗

	// @alias 高度
	// 高度修改
	Height string

	// @alias 高度时间
	// 混合高度修改所需要的时间量
	HeightTime float64

	// @alias 目标单位
	// 作为该类效果的目标的单位
	M目标单位 *SEffectWhichUnit

	// @alias 击杀得分单位
	// 如果该字段指向一个对“轰击单位”有敌意的有效单位，其将提高一点“轰击单位”的击杀数，并对行为发出一个击杀得分通知。
	KillCreditUnit string

	// @alias 杀死幻像
	// 启用时，该效果击杀幻像。
	KillHallucination string

	// @alias 发射单位
	// 指定单位复制老兵行为、击杀数以及活力值（如果被请求），模拟（如果被请求），复制指令于（如果被请求），复制集结点（如果被请求），以及要为其修改资源的玩家（如果被请求）。
	LaunchUnit *SEffectWhichUnit

	// @alias 修改标旗
	// 效果的标旗
	ModifyFlags string

	// @alias 修改所有者玩家
	// 指定要将“轰击单位”的所有者转移至的玩家。如果设置为“未知”则忽略。
	ModifyOwnerPlayer *SEffectWhichPlayer

	// @alias 集结单位
	RallyUnit string

	// @alias 资源恢复奖励
	// 指定一个平值奖励来添加到资源，无视资源容量。该值会被统计到“资源恢复系数”结果中。
	ResourceRestoreBonus string

	// @alias 资源恢复系数
	// 指定一个系数，该值将被资源的容量相乘。这会被算入“资源恢复奖励”中。
	ResourceRestoreFraction string

	// @alias 资源
	// 如果“发射单位”拥有资源行为，指定一定量的资源来从“发射单位”处采集。
	Resources string

	// @alias 资源采集奖励
	// 指定一个奖励资源量，该值会被添加到另一个值中，即对“资源行为”和“资源采集系数”结果指定的资源求根得到的值。
	ResourcesHarvestedBonus string

	// @alias 资源采集系数
	// 指定一个量值，该值将被分离出的量值相乘，作为已采集的奖励资源量。该量值会被算入“资源采集奖励”。
	ResourcesHarvestedFraction string

	// @alias 回收系数
	// 仅在如果该效果设置了“回收”标旗时应用。指定单位消耗倍数来定义能提供的返还资金有多少。
	SalvageFactor string

	// @alias 生成计数
	// 如果“轰击单位”有一个“生成”行为，则被生成的单位数量将会由该数量进行调整。
	SpawnCount float64

	// @alias 转移单位
	TransferUnit string

	// @alias 用户处理器
	UserHandler string

	// @alias 活力
	H活力 map[string]*SEffectModifyUnitVital

	// 经验点数修正符
	// @alias 经验值
	J经验值 float64

	// @alias 创建表现
	C创建表现 map[string]*S效果修改单位表现
}

type S效果修改单位表现 struct {
	// @alias 创建时机
	C创建时机 battleenum.E效果修改单位创建时机

	// @alias 位置
	W位置 *SEffectWhichScope

	// @alias 表现
	B表现 string `link:"表现"`
}

// 设置具体值
// 设置最大值的系数，例如回复到100%最大值
// 增加具体值
// 增加最大值的系数
type SEffectModifyUnitVital struct {
	// @alias 操作
	C操作 battleenum.H活力数值操作
	// @alias 活力
	H活力 battleenum.H活力类型
	// 格式如下:
	// ^最小值
	// $最大值
	// %最大值的百分比
	// #当前值的百分比
	// 具体值
	// @alias 数量
	S数量 string
	// @alias 最小值
	Z最小值 string
	// @alias 最大值
	Z最大值 string `value:"4294967295"`
}

// C效果_移除行为
// 执行后移除目标单位的行为
// 演算体事件 [[battleenum.ActorSubEffect]]
// ```
// CreateLater -> Start -> Stop -> Dispose
// ```
// @schema_export --ident=schema --json --config=效果
// @schema_go
// @cache_ts
// @alias 效果_移除行为
type C效果_移除行为 struct {
	C效果

	// @alias 标旗
	// 该效果的标旗
	B标旗 map[battleenum.EffectRemoveBehaviorFlag]bool

	// @alias 行为过滤器
	X行为过滤器 *SBehaviorFilter

	// @alias 计数
	// 被效果移除的行为的数量
	J计数 int

	// @alias 杀死幻像
	// 启用时，该效果将杀死幻像。
	S杀死幻像 bool

	// @alias 目标单位
	// 用于配置可作为该效果目标的单位
	M目标单位 *SEffectWhichUnit
}

// C效果_集合
// 执行效果集合
// @schema_export --ident=schema --json --config=效果
// @schema_go
// @cache_ts
// @alias 效果_集合
type C效果_集合 struct {
	C效果

	// @alias 效果
	// 当执行该集效果时所执行的效果列表
	X效果 map[string]string `link:"效果"`

	// @alias 最大计数
	// 指定要执行的子类效果最大数。和“最小计数”使用。
	Z最大计数 int

	// @alias 最小计数
	// 指定要执行的子类效果最小数。和“最大计数”使用。
	Z最小计数 int

	// @alias 循环计数
	X循环计数 bool

	// @alias 随机
	// 指定子类效果在被执行前以随机顺序打乱。
	S随机 bool
}

// 效果-C效果_切换
// @schema_export --ident=schema --json --config=效果
// @schema_go
// @cache_ts
// @alias 效果_切换
type C效果_切换 struct {
	C效果

	// Cases
	// 切换逻辑
	CaseArray []*SEffectSwitchCase

	// 默认
	// 如果其它所有case都无法被满足时所运行的默认效果
	CaseDefault string

	// 目标位置
	// 指定在和技能使用时该效果拥有的目标瞄准所需条件的类型。如果设为“未知”（默认），那么其将以子类效果的所需条件类型为准。
	TargetLocation battleenum.TargetLocation
}

// @schema_export --ident=schema --json --config=效果
// @schema_go
// @cache_ts
// @alias 效果_获取点
type C效果_获取点 struct {
	C效果

	// @alias 点集合
	D点集合 []*SEffectPoint
}

// @schema_export --ident=schema --json --config=效果
// @schema_go
// @cache_ts
// @alias 效果_传送
type C效果_传送 struct {
	C效果

	// @alias 传送标旗
	B传送标旗 map[battleenum.C传送效果标旗]bool

	// 指定传送源。这通常会在你想要执行一个相对传送时（例如召回） 使用。进行传送的单位与位置相关联的偏移会被视为与目的点尽可能的接近。
	// 源指向目标形成一个方向, 传送距离从源开始计算
	// @alias 起点位置
	Q起点位置 *SEffectWhichLocation

	// 用于配置传送的目标位置
	// @alias 目标位置
	M目标位置 *SEffectWhichLocation

	// 传送距离
	// @alias 传送距离
	C传送距离 float64

	// 指定传送可允许的最小距离。帮助避免对无法使你靠近你目标一个合理的距离的传送浪费能量或冷却。
	// 属于条件，与目标距离太近，不会进行传送
	// @alias 最小传送距离
	Z最小传送距离 float64

	// 用于配置被传送的单位
	// @alias 被传送单位
	B被传送单位 *SEffectWhichUnit

	// 传送到达目标后产生的效果
	// @alias 到达效果
	D到达效果 string `link:"效果"`

	// 如果目标点无效，则具有传送能力的单位可以传送到距离目标多远的距离
	// @alias 放置区范围
	F放置区范围 float64
}

// 效果-C效果_切换
// @schema_export --ident=schema --json --config=效果
// @schema_go
// @cache_ts
// @alias 效果_修改技能
type C效果_修改技能 struct {
	C效果

	// @alias 技能
	J技能 *S查找技能

	// @alias 优先级
	Y优先级 float64

	// @alias 允许
	Y允许 battleenum.BoolIgnore

	// @alias 禁用战术
	J禁用战术 battleenum.BoolIgnore
}

// C效果_转移行为
// 执行后把发射单位中的指定行为转移/复制给轰击单位
// @schema_export --ident=schema --json --config=效果
// @schema_go
// @cache_ts
// @alias 效果_转移行为
type C效果_转移行为 struct {
	C效果
	// @alias 行为过滤器
	// 由该效果转移的行为
	BehaviorFilter *SBehaviorFilter

	// @alias 复制
	// 当启用后，该行为将被复制而非移除。
	Copy bool

	// @alias 计数
	// 要转换的行为数（对于可叠加的行为）
	Count int

	// @alias 轰击单位
	// 用于配置接收该行为的单位
	ImpactUnit *SEffectWhichUnit

	// @alias 发射单位
	// 用于配置将是该行为源的单位
	LaunchUnit *SEffectWhichUnit

	// @alias 保持
	// 定义行为是被转移或克隆（例如原始单位的左边）。
	Preserve string
}

type SEffectMover struct {
	// 范围小于或等于
	Range float64
	// 移动器
	Mover string
}

type SEffectSwitchCase struct {
	// 效果
	// Effect per case
	Effect string

	// 失败
	// Switch case fall through for the effect
	FallThrough bool

	// 验证器
	Validator string
}
